package net.realsee.gcl.service.impl;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.realsee.common.constant.CacheNames;
import net.realsee.common.utils.redis.CacheUtils;
import net.realsee.gcl.domain.bo.wcs.ContainerPositionBo;
import net.realsee.gcl.service.IGclLocationExtendService;
import org.springframework.stereotype.Service;

/**
 * 协鑫库位扩展接口实现
 *
 * @author 孙正华
 * @since 2023/11/08 13:28
 */
@Slf4j
@RequiredArgsConstructor
@Service
public class GclLocationExtendServiceImpl implements IGclLocationExtendService {

    /**
     * 设置CCS系统中库位状态
     * <p>
     * 10: 库位为空，可进入(为此状态时, WCS才让小车进入库位)
     * 20: 库位使用中
     * 30: 库位已被禁用
     */
    @Override
    public void setCcsLocationStatus(String location, Integer status) {
        CacheUtils.put(CacheNames.LOCATION_CCS_STATUS, location, status);
    }

    /**
     * 获取CCS系统中库位状态
     * <p>
     * 10: 库位为空，可进入(为此状态时, WCS才让小车进入库位)
     * 20: 库位使用中
     * 30: 库位已被禁用
     */
    @Override
    public Integer getCcsLocationStatus(String location) {
        return CacheUtils.get(CacheNames.LOCATION_CCS_STATUS, location);
    }

    /**
     * 设置WCS系统中库位上任务状态
     * <p>
     * 10:到位状态(已将货架放在库位内)
     * 20:离开状态(已将货架搬离库位)
     * 30:准备状态(在准入库位前等待点上)
     */
    @Override
    public void setWcsLocationTaskStatus(String location, Integer status) {
        CacheUtils.put(CacheNames.LOCATION_WCS_TASK_STATUS, location, status);
    }

    /**
     * 获取WCS系统中库位上任务状态
     * <p>
     * 10:到位状态(已将货架放在库位内)
     * 20:离开状态(已将货架搬离库位)
     * 30:准备状态(在准入库位前等待点上)
     */
    @Override
    public Integer getWcsLocationTaskStatus(String location) {
        return CacheUtils.get(CacheNames.LOCATION_WCS_TASK_STATUS, location);
    }

    /**
     * 设置CCS系统中库位上容器位置
     */
    @Override
    public void setCcsLocationContainerPosition(ContainerPositionBo containerPosition) {
        CacheUtils.put(CacheNames.LOCATION_CCS_CONTAINER_POSITION, containerPosition.getLocation(), containerPosition);
    }

    /**
     * 获取CCS系统中库位上容器位置
     */
    @Override
    public ContainerPositionBo getCcsLocationContainerPosition(String location) {
        return CacheUtils.get(CacheNames.LOCATION_CCS_CONTAINER_POSITION, location);
    }

    /**
     * 设置WCS系统中库位上容器位置调整状态
     * OK / NG
     */
    @Override
    public void setWcsLocationContainerPositionAdjustStatus(String location, String status) {
        CacheUtils.put(CacheNames.LOCATION_WCS_CONTAINER_POSITION_ADJUST_STATUS, location, status);
    }

    /**
     * 获取WCS系统中库位上容器位置调整状态
     * OK / NG
     */
    @Override
    public String getWcsLocationContainerPositionAdjustStatus(String location) {
        return CacheUtils.get(CacheNames.LOCATION_WCS_CONTAINER_POSITION_ADJUST_STATUS, location);
    }
}
